import re

from rest_framework import serializers

from users.models import User

class UserSerializer(serializers.ModelSerializer):
    # 用户序列化器
    class Meta:
        # 指定模型类
        model=User
        fields=('id','username','mobile','email','password')

        # 给字段增加额外选项参数
        extra_kwargs={
            'username':{
                'max_length':20,
                'min_length':5,
            },
            'password':{
                'write_only':True,     #write_only表示该字段只参与反序列化过程（保存验证过程）
                'max_length':20,
                'min_length':8,
            }
        }
    # 对单一字段验证（只验证手机号）
    def validate_mobile(self, value):
        if not re.match('1[3-9]\d{9}',value):
            raise serializers.ValidationError('手机格式不正确')
        return value

    # ModelSerializer父类里的create方法不会对密码进行加密，需要重写create方法
    def create(self, validated_data):
        # 第一种方法
        # # 调用父类获取保存后对象
        # user=super().create(validated_data)
        # # 用户对象使用密码加密方法进行加密
        # user.set_password(validated_data['password'])
        # user.save()
        # 第二种方法
        # create_user方法可以直接对密码进行加密
        # **validated_data等价于把字典{‘username’:'python'}拆包成username='pyhton'
        user=User.objects.create_user(**validated_data)
        return user